# -*- coding: utf-8 -*-
#一些迭代工具

#并行迭代
names=['jack','rose','james']
ages=[15,16,17]
for i in  range(len(names)):
    print names[i]+' is '+str(ages[i])+' years old.'
print	
#内建函数 Zip()  可以把两个序列‘压缩’在一起，然后返回一个元组的列表：
print zip(names,ages)  #[('jack', 15), ('rose', 16), ('james', 17)]

for name,age in zip(names,ages):
    print name+' is '+str(age)+' years old.'
	
#zip() 函数也可以作用于任意多的序列。主要是Zip可以处理不等长的序列，当最短的序列用完时就会停止。
print zip(range(1,6),range(5,10))  #[(1, 5), (2, 6), (3, 7), (4, 8), (5, 9)]
print zip(range(3),xrange(10))  #[(0, 0), (1, 1), (2, 2)]  可以处理不等长的序列     注意：不推荐用range替换xrange， range会计算所有的数字，xrange他只计算前几个数字

#sorted 返回一个顺序,reversed 反转 但是返回一个迭代对象
name=[2,3,4,6,1]
new_name=sorted(name)   
print new_name        #[1, 2, 3, 4, 6]
print sorted(name)    #[1, 2, 3, 4, 6]

old_name=reversed(name)
print old_name            #<listreverseiterator object at 0x00000000006729E8>
print reversed(name)      #<listreverseiterator object at 0x0000000000672390>

#列表推导式	
from math import sqrt
print int(sqrt(8))
print [x for x in range(1,11)]
print [x*x for x in range(1,11)]
print [x*x for x in range(1,11) if x%3==0]
print [(x,y) for x in range(0,3) for y in range(0,3)]
result=[]
for x in range(0,3):
	for y in range(0,3):
		result.append((x,y))
print result    






    